<?php
(defined ( 'BASEPATH' )) or exit ( 'No direct script access allowed' );

// Originaly CodeIgniter i18n library by J�r�me Jaglale
// http://maestric.com/en/doc/php/codeigniter_i18n
// modification by Yeb Reitsma


/*
in case you use it with the HMVC modular extension
uncomment this and remove the other lines
load the MX_Loader class */

//require APPPATH."third_party/MX/Lang.php";


//class MY_Lang extends MX_Lang {


class MY_Lang extends CI_Lang {
	
	/**************************************************
     configuration
	 ***************************************************/
	
	// languages
	private $languages = array ('vi' => 'vietnamese','en' => 'english' );
	
	// special URIs (not localized)
	private $special = array ("admin" );
	
	// where to redirect if no language in URI
	private $uri;
	private $default_uri;
	private $lang_code;
	
	/**************************************************/
	
	function MY_Lang() {
		parent::__construct ();
		
		global $CFG;
		global $URI;
		global $RTR;
		
		$this->uri = $URI->uri_string ();
		$this->default_uri = $RTR->default_controller;
		
		$uri_segment = $this->get_uri_lang ( $this->uri );
		$this->lang_code = $uri_segment ['lang'];
		
		$url_ok = false;
		if ((! empty ( $this->lang_code )) && (array_key_exists ( $this->lang_code, $this->languages ))) {
			$language = $this->languages [$this->lang_code];
			$CFG->set_item ( 'language', $language );
			$url_ok = true;
		}
		
		if ((! $url_ok) && (! $this->is_special ( $uri_segment ['parts'] [0] ))) // special URI -> no redirect
{
			// set default language
			$CFG->set_item ( 'language', $this->languages [$this->default_lang ()] );
			
			$uri = (! empty ( $this->uri )) ? $this->uri : $this->default_uri;
			$uri = ($uri [0] != '/') ? '/' . $uri : $uri;
			$new_url = $CFG->config ['base_url'] . $this->default_lang () . $uri;
			
			header ( "Location: " . $new_url, TRUE, 302 );
			exit ();
		}
	}
	
	// get current language
	// ex: return 'en' if language in CI config is 'english' 
	function lang() {
		global $CFG;
		$language = $CFG->item ( 'language' );
		
		$lang = array_search ( $language, $this->languages );
		if ($lang) {
			return $lang;
		}
		
		return NULL; // this should not happen
	}
	
	function is_special($lang_code) {
		if ((! empty ( $lang_code )) && (in_array ( $lang_code, $this->special )))
			return TRUE;
		else
			return FALSE;
	}
	
	function switch_uri($lang) {
		if ((! empty ( $this->uri )) && (array_key_exists ( $lang, $this->languages ))) {
			
			if ($uri_segment = $this->get_uri_lang ( $this->uri )) {
				$uri_segment ['parts'] [0] = $lang;
				$uri = implode ( '/', $uri_segment ['parts'] );
			} else {
				$uri = $lang . '/' . $this->uri;
			}
		}
		
		return $uri;
	}
	
	//check if the language exists
	//when true returns an array with lang abbreviation + rest
	function get_uri_lang($uri = '') {
		if (! empty ( $uri )) {
			$uri = ($uri [0] == '/') ? substr ( $uri, 1 ) : $uri;
			
			$uri_expl = explode ( '/', $uri, 2 );
			$uri_segment ['lang'] = NULL;
			$uri_segment ['parts'] = $uri_expl;
			
			if (array_key_exists ( $uri_expl [0], $this->languages )) {
				$uri_segment ['lang'] = $uri_expl [0];
			}
			return $uri_segment;
		} else
			return FALSE;
	}
	
	// default language: first element of $this->languages
	function default_lang() {
		$browser_lang = ! empty ( $_SERVER ['HTTP_ACCEPT_LANGUAGE'] ) ? strtok ( strip_tags ( $_SERVER ['HTTP_ACCEPT_LANGUAGE'] ), ',' ) : '';
		$browser_lang = substr ( $browser_lang, 0, 2 );
		return (array_key_exists ( $browser_lang, $this->languages )) ? $browser_lang : 'en';
	}
	
	// add language segment to $uri (if appropriate)
	function localized($uri) {
		if (! empty ( $uri )) {
			$uri_segment = $this->get_uri_lang ( $uri );
			if (! $uri_segment ['lang']) {
				
				if ((! $this->is_special ( $uri_segment ['parts'] [0] )) && (! preg_match ( '/(.+)\.[a-zA-Z0-9]{2,4}$/', $uri ))) {
					$uri = $this->lang () . '/' . $uri;
				}
			}
		}
		return $uri;
	}
} 

// END MY_Lang Class

/* End of file MY_Lang.php */
/* Location: ./application/core/MY_Lang.php */